/**
 * 高效率根据一个数组找到它每一项，在另一个对象数组中出现的那个 item
 */
export function findItemsByKey<J extends Record<number | string, unknown>, T extends keyof J>(vals: unknown[], list: J[], key: T): J[] {
  const newList: J[] = [];
  if (vals.length > 0) {
    const map = new Map();
    list.forEach((item) => {
      map.set(item[key], item);
    });
    vals.forEach((val) => {
      map.has(val) && newList.push(map.get(val));
    });
  }
  return newList;
}

/**
 * 高效率根据一个数组找到它每一项，在另一个对象数组中出现的那个 item
 */
export function findItemsByKey2<K, J extends Record<number | string, unknown>, T extends keyof J>(
  vals: K[],
  list: J[],
  key: T
): { newList: J[]; newValue: K[] } {
  const newList: J[] = [];
  let newValue: K[] = [];
  if (vals.length > 0) {
    const map = new Map();
    list.forEach((item) => {
      map.set(item[key], item);
    });
    vals.forEach((val) => {
      if (map.has(val)) {
        newList.push(map.get(val));
      } else {
        newValue.push(val);
      }
    });
  } else {
    newValue = vals;
  }
  return { newList, newValue };
}
